SimpleEditor = function () {}

SimpleEditor.prototype = {
	_oArea : false,
	
	init : function (baseId) {
		this._oArea = document.getElementById (baseId);
	},
	
	insertTag : function (tagName, sParams) {
		var starttag = "<" + tagName + (sParams !== null ? " " + sParams : "") + ">";
		var endtag = "</" + tagName + ">";
		
		this._oArea.focus();
		
		var scrtop = this._oArea.scrollTop;
		var cursorPos = this.getCursor(); 
	
		if (cursorPos.start == cursorPos.end) {
			var nuCursorPos = cursorPos.start + starttag.length;
			this._oArea.value = this._oArea.value.substring(0,cursorPos.start) + starttag + endtag + this._oArea.value.substr(cursorPos.start );
			this.setCursor(nuCursorPos,nuCursorPos);
		}
		else{
			var txt_pre = this._oArea.value.substring (0,cursorPos.start);
			var txt_sel = this._oArea.value.substring(cursorPos.start,cursorPos.end);
			var txt_aft = this._oArea.value.substring(cursorPos.end);
			this._oArea.value = txt_pre+starttag + txt_sel + endtag + txt_aft;
			var nuCursorPos = String(txt_pre + starttag + txt_sel + endtag).length;
			this.setCursor(nuCursorPos,nuCursorPos);
		}
		
		if (scrtop) {
			this._oArea.scrollTop = scrtop;
		}
	},
	
	insertLink : function () {
		var cur = this.getCursor();
	
		if (cur.start != cur.end) {
			var href = window.prompt("Введите URI ссылки", 'http://');
			var regex = new RegExp('([A-Za-z][A-Za-z0-9+.-]{1,120}:[A-Za-z0-9/](([A-Za-z0-9$_.+!*,;/?:@&~=-])|%[A-Fa-f0-9]{2}){1,333}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]{0,1000}))?)');
	
			if (href && href.match(regex)) {
				this.insertTag("a", 'href="' + href + '"');
			}
			else if (href) {
				alert("Это не URI");
			}
		}
		else {
			alert("Сначала выделите текст, который вы желаете сделать ссылкой");
		}
	},
	
	insertImage : function () {
		var href = window.prompt("Введите URI изображения", 'http://');
		var regex = new RegExp('([A-Za-z][A-Za-z0-9+.-]{1,120}:[A-Za-z0-9/](([A-Za-z0-9$_.+!*,;/?:@&~=-])|%[A-Fa-f0-9]{2}){1,333}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]{0,1000}))?)');

		if (href && href.match(regex)) {
			this._oArea.focus();
		
			var scrtop = this._oArea.scrollTop;
			var cursorPos = this.getCursor(); 
		
			var txt_pre = this._oArea.value.substring (0,cursorPos.start);
			var tag = '<img src="' + href + '" alt="" title="" />';
			var txt_aft = this._oArea.value.substring(cursorPos.end);
			this._oArea.value = txt_pre + tag + txt_aft;
			var nuCursorPos = String(txt_pre +tag).length;
			this.setCursor(nuCursorPos,nuCursorPos);
			
			if (scrtop) {
				this._oArea.scrollTop = scrtop;
			}
		}
		else if (href) {
			alert("Это не URI");
		}
	},
	
	insertVideo : function () {
		var href = window.prompt("Адрес видеоролика", '');
		var regex = new RegExp('([A-Za-z][A-Za-z0-9+.-]{1,120}:[A-Za-z0-9/](([A-Za-z0-9$_.+!*,;/?:@&~=-])|%[A-Fa-f0-9]{2}){1,333}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]{0,1000}))?)');

		if (href && href.match(regex)) {
			this._oArea.focus();
		
			var scrtop = this._oArea.scrollTop;
			var cursorPos = this.getCursor(); 
		
			var txt_pre = this._oArea.value.substring (0,cursorPos.start);
			var tag = '<video>' + href + '</video>';
			var txt_aft = this._oArea.value.substring(cursorPos.end);
			this._oArea.value = txt_pre + tag + txt_aft;
			var nuCursorPos = String(txt_pre +tag).length;
			this.setCursor(nuCursorPos,nuCursorPos);
			
			if (scrtop) {
				this._oArea.scrollTop = scrtop;
			}
		}
		else if (href) {
			alert("Это не URI");
		}
	},
	
	insertUserLink : function () {
		var href = window.prompt("Введите логин пользователя", '');


		this._oArea.focus();
	
		var scrtop = this._oArea.scrollTop;
		var cursorPos = this.getCursor(); 
	
		var txt_pre = this._oArea.value.substring (0,cursorPos.start);
		var tag = '<user login="' + href + '" />';
		var txt_aft = this._oArea.value.substring(cursorPos.end);
		this._oArea.value = txt_pre + tag + txt_aft;
		var nuCursorPos = String(txt_pre +tag).length;
		this.setCursor(nuCursorPos,nuCursorPos);
		
		if (scrtop) {
			this._oArea.scrollTop = scrtop;
		}
	},
	
	getCursor : function () {
		var result = { start: 0, end: 0 };
		if (this._oArea.setSelectionRange)  {
			result.start= this._oArea.selectionStart;
			result.end = this._oArea.selectionEnd;
		}
		else if (!document.selection) {
			return 0;
		}
		else if (document.selection && document.selection.createRange) {
			var range = document.selection.createRange();
			var stored_range = range.duplicate();
			stored_range.moveToElementText(this._oArea);
			stored_range.setEndPoint('EndToEnd', range);
			result.start = stored_range.text.length - range.text.length;
			result.end = result.start + range.text.length;
		}
		
		return result;
	},
	
	setCursor : function (start, end){
		if (this._oArea.createTextRange) {
			var range = this._oArea.createTextRange();
			range.move("character", start);
			range.select();
		}
		else if (this._oArea.selectionStart) {
			this._oArea.setSelectionRange(start, end);
		}
	}
	
}